###########################################################################
#	MAKEFILE for C++ branch of pictures
#	Undef 2 lines under "JPG support" if you do not have jpg library.
###########################################################################


TARGET_NAME = gconvert gcomp filter histfix


# Defaults that can be overriden from command line.
DEBUG := 0

# filesystem utilities
MKDIR := mkdir -p

GCC=gcc
GXX=gpp
FLAGS=-Wall -I./ -I./atoms/include/ -I./atoms/ -fno-rtti -fno-exceptions -DRASTER_3D
FLAGS+=-DOPTIMISE_SPEED -DRasImg -DERROR_HANDLER -DSupportPNG=0
#FLAGS+=-mcpu=k6 -march=k6 -DStreams 
OBJ=.o

ifeq ($(DEBUG),0)
 FLAGS+=-O6
 OBJDIR=release
else
 FLAGS+=-O0 -g -ggdb1 -DDEBUG
 OBJDIR=debug
endif


SOURCES=ras_img
SOURCES+=ras_bmp
SOURCES+=ras_ftg
SOURCES+=ras_gif
SOURCES+=rasterut
SOURCES+=error
SOURCES+=filehnd
SOURCES+=imageop
SOURCES+=imgsupp
SOURCES+=img_tool
SOURCES+=vecimage
SOURCES+=vecraster
SOURCES+=img_futi
SOURCES+=mor_tool
SOURCES+=rasterOp
SOURCES+=imgut
SOURCES+=imgop
SOURCES+=bitstrea
SOURCES+=quantise
SOURCES+=quantise2

SOURCES+=atoms/mtx_impl
SOURCES+=atoms/matrix
SOURCES+=atoms/raster
SOURCES+=atoms/rasterc
SOURCES+=atoms/struct
SOURCES+=atoms/std_str
SOURCES+=atoms/strings
SOURCES+=atoms/xlat_swp


###### JPG support ######
LIBS+=-ljpeg
OBJECTS+=ras_jpg$(OBJ)
SOURCES+=ras_jpg

###### PNG support ######
#LIBS+=-ljpeg
#OBJECTS+=ras_png$(OBJ)
#FLAGS+=-IM:/GraphicsMagick/png/ -IM:/GraphicsMagick/zlib/


###########################################
TARGET_DIR = ../bin/dpmi32

# for Linux - debian & new slackware
ifeq ($(OSTYPE),linux-gnu)
TARGET_DIR = ../bin/lnx32
GXX = g++
endif

# for Linux - slakware
ifeq ($(OSTYPE),linux)
TARGET_DIR = ../bin/lnx32
GXX = g++
endif

# for Linux - Red Hat
ifeq ($(OSTYPE),Linux)
TARGET_DIR = ../bin/lnx32
GXX = g++
endif
#end of Linux

# for MAC
ifeq ($(OSTYPE),darwin)
TARGET_DIR = ../bin/mac
GCC = g++
GXX = g++
endif
###################################



.SUFFIXES: .c .cc $(OBJ) .exe

default:	$(TARGET_NAME) $(MAKEFILE_LIST)

##############################################################
# create destination directories
$(TARGET_DIR) :
	$(MKDIR) $@

$(OBJDIR):
	$(MKDIR) $@

$(OBJDIR)/%$(OBJ): atoms/%.c $(MAKEFILE_LIST) $(HEADERS) | $(OBJDIR)
	echo $(OSTYPE)
	$(GCC) $(FLAGS) -c $< $(ERROR) -o $(OBJDIR)/$*$(OBJ) $(GETTEXT)

$(OBJDIR)/%$(OBJ): atoms/%.cc $(MAKEFILE_LIST) $(HEADERS) | $(OBJDIR)
	echo $(OSTYPE)
	$(GXX) $(FLAGS) -c $< $(ERROR) -o $(OBJDIR)/$*$(OBJ) $(GETTEXT)

$(OBJDIR)/%$(OBJ): %.cc $(MAKEFILE_LIST) $(HEADERS) | $(OBJDIR)
	echo $(OSTYPE)
	$(GXX) $(FLAGS) -c $< $(ERROR) -o $(OBJDIR)/$*$(OBJ) $(GETTEXT) -I./img_RW

$(OBJDIR)/%$(OBJ): %.c $(MAKEFILE_LIST) $(HEADERS) | $(OBJDIR)
	$(GCC) $(FLAGS) -c $< $(ERROR) -o $(OBJDIR)/$*$(OBJ) $(GETTEXT) -I./img_RW

$(TARGET_NAME): $(addprefix $(OBJDIR)/,$(addsuffix $(OBJ), $(notdir $(TARGET_NAME) $(SOURCES) ))) \
          $(MAKEFILE_LIST) | $(TARGET_DIR)
	$(GCC) -o $(TARGET_DIR)/$@ $(OBJDIR)/$@$(OBJ) $(addprefix $(OBJDIR)/,$(addsuffix $(OBJ), $(notdir $(SOURCES) ))) $(LIBS)


distclean: clean generic

clean:
	rm -f *.bak *.BAK *.bkp *.dsk *.DSK *.exe *.err *.EXE *.map *.o *.obj *.OBJ *.opt *.out
	rm -f *.old Upgrade*.XML *.user *.suo MSVC/*.suo MSVC/*.user
	rm -f *.~?? core *.ilk *.tfa *.lk1 *.mk1 *.mk *.pch *.ncb *.plg *.rpo *.swp *.SWP
	rm -f atoms/*.o atoms/*.obj atoms/*.bak atoms/*.bkp atoms/*.map atoms/*.~?? atoms/core
	rm -f out.txt
	rm -f debug/*.*
	rm -f release/*.*
	rm -f -d debug
	rm -f -d release

generic:
	cp atoms/include/common.h.gen atoms/include/common.h
	cp makefile.gen makefile
	cp img_RW/imgsupp.h.gen img_RW/imgsupp.h
	cp img_RO/imgsupp.h.gen img_RO/imgsupp.h

##### FIX for stupid case insensitive Windows #####
ras_img.cc: | RAS_IMG.CC
	mv RAS_IMG.CC ras_img.cc

rasterut.cc: | RASTERUT.CC
	mv RASTERUT.CC rasterut.cc

filehnd.cc: | FILEHND.CC
	mv FILEHND.CC filehnd.cc

gcomp.cc: | GCOMP.CC
	mv GCOMP.CC gcomp.cc

filter.cc: | FILTER.CC
	mv FILTER.CC filter.cc
	
convert.cc: | CONVERT.CC
	mv CONVERT.CC convert.cc
